Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Machine virtuelle Java</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Machine_virtuelle_Java"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Machine_virtuelle_Java rootpage-Machine_virtuelle_Java skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Machine virtuelle Java</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">

<p>La <b>machine virtuelle Java</b> (en anglais <i>Java virtual machine</i>, abr. <b>JVM</b>) est une <a href="Machine_virtuelle" title="Machine virtuelle">machine virtuelle</a> qui exécute des programmes compilés sous forme de <a href="Bytecode_Java" title="Bytecode Java">bytecode Java</a>.
</p><p>L'appareil est simulé par un logiciel spécifique à chaque <a href="Plateforme_(informatique)" class="mw-redirect" title="Plateforme (informatique)">plateforme</a> ou couple (<a href="Machine" title="Machine">machine</a>/<a href="Syst%C3%A8me_d'exploitation" title="Système d'exploitation">système d’exploitation</a>) et permet aux applications <a href="Langage_de_programmation_Java" class="mw-redirect" title="Langage de programmation Java">Java</a> compilées en bytecode de produire les mêmes résultats quelle que soit la plate-forme, tant que celle-ci est pourvue de la machine virtuelle Java adéquate.
</p><p>La JVM permet d'exécuter d'autres langages que le langage Java (Scala, Kotlin, ...), du moment qu'un compilateur transforme les expressions de cet autre langage en une série d'octets respectant le format binaire d'une classe Java.
</p><p>La machine virtuelle exécute les instructions données par le bytecode contenu dans la classe Java en suivant le modèle de la <a href="Pile_(informatique)" title="Pile (informatique)">pile</a>&nbsp;: chaque niveau de pile contient les données propres à chaque opération.
</p><p>Une spécification de <a href="Sun_Microsystems" title="Sun Microsystems">Sun</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> décrit les fonctions et propriétés que doivent respecter toutes les machines virtuelles java. De plus, la plupart de ces machines comportent un <a href="Ramasse-miettes_(informatique)" title="Ramasse-miettes (informatique)">ramasse-miettes</a> (la notion est citée dans la spécification<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>, mais sans être formellement rendue obligatoire), ou un <a href="Compilation_%C3%A0_la_vol%C3%A9e" title="Compilation à la volée">compilateur à la volée</a>.
</p><p>Le compilateur Java faisant peu d'optimisations, c'est à la machine virtuelle de les faire, selon les objectifs propres à cette dernière.
</p>

<div class="mw-heading mw-heading2"><h2 id="HotSpot,_la_machine_virtuelle_d'Oracle"><span id="HotSpot.2C_la_machine_virtuelle_d.27Oracle"></span>HotSpot, la machine virtuelle d'Oracle</h2></div>

<p><a href="HotSpot" title="HotSpot">HotSpot</a> est la machine la plus utilisée. Elle a été créée et réalisée par Sun, elle est aujourd'hui propriété d'<a href="Oracle_Corporation" class="mw-redirect" title="Oracle Corporation">Oracle</a><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>, depuis que cette dernière a racheté Sun. Elle est gratuite, propriétaire jusqu'à la version 6 (stable) et <a href="Logiciel_Libre" class="mw-redirect" title="Logiciel Libre">libre</a> à partir de la version 7.
</p><p>Le <time class="nowrap" datetime="2006-11-11" data-sort-value="2006-11-11">11 novembre 2006</time>, <b>Sun Microsystems</b> a publié les sources de sa machine virtuelle HotSpot et de son compilateur javac sous licence <a href="Licence_publique_g%C3%A9n%C3%A9rale_GNU" title="Licence publique générale GNU">GNU GPL</a>.
</p><p>La toute première version ne se comportait que comme un <a href="Interpr%C3%A8te_(informatique)" title="Interprète (informatique)">interpréteur</a>. Cette approche était pénalisante, car l'interprète passe plus de temps à interpréter qu'à exécuter. Puis est apparue la <a href="Compilation_%C3%A0_la_vol%C3%A9e" title="Compilation à la volée">compilation à la volée</a>, qui traduit le bytecode en <a href="Langage_machine" title="Langage machine">langage machine</a>, et exécute ce langage machine. Ensuite la machine virtuelle est devenue capable de détecter les portions les plus fréquemment utilisées pour concentrer les optimisations sur elles. Elle a été dotée d'un <a href="Profilage_de_code" class="mw-redirect" title="Profilage de code">profileur</a>, et d'optimisations standards comme la mise à plat des boucles. Toutes ces opérations peuvent être faites en plusieurs passes, soit pour les améliorer progressivement, soit pour les annuler si elles se révèlent obsolètes<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Autres_machines_virtuelles_Java">Autres machines virtuelles Java</h2></div>

<div class="mw-heading mw-heading3"><h3 id="En_développement"><span id="En_d.C3.A9veloppement"></span>En développement</h3></div>
<ul><li><a href="OpenJ9" title="OpenJ9">OpenJ9</a>, développé par <a href="IBM" title="IBM">IBM</a> et la <a href="Fondation_Eclipse" title="Fondation Eclipse">fondation Eclipse</a></li>
<li><a href="JamaicaVM" title="JamaicaVM">JamaicaVM</a>, machine virtuelle spécialisée dédiée à l'<a href="Syst%C3%A8me_embarqu%C3%A9" title="Système embarqué">électronique embarquée</a> et qui prend en compte les contraintes <a href="Syst%C3%A8me_temps_r%C3%A9el" title="Système temps réel">temps-réel</a> des applications</li>
<li>Platform Prime, développé par Azul</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Abandonnées"><span id="Abandonn.C3.A9es"></span>Abandonnées</h3></div>
<ul><li>Celle de <a href="Microsoft" title="Microsoft">Microsoft</a> était fournie avec le système d’exploitation <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>. Sun pensait que la machine pouvait être <a href="Bug_informatique" class="mw-redirect" title="Bug informatique">boguée</a> volontairement pour contrer l’avancée du langage Java (portablité sur plusieurs systèmes d’exploitation donc risque de perte pour Microsoft). À la suite d'un procès gagné par Sun, elle n’est plus fournie avec Windows.</li>
<li><a href="JRockit" title="JRockit">JRockit</a> développée initialement par <a href="BEA_Systems" title="BEA Systems">BEA</a> maintenant <a href="Oracle_Corporation" class="mw-redirect" title="Oracle Corporation">Oracle Corporation</a>. Elle est principalement utilisée pour <a href="Weblogic" class="mw-redirect" title="Weblogic">Weblogic</a>.</li>
<li><a href="Apple" title="Apple">Apple</a> en a créé une pour son système d'exploitation, <a href="MacOS" title="MacOS">macOS</a>.</li>
<li>Jikes RVM</li>
<li>Apache Harmony&nbsp;<a href="https://en.wikipedia.org/wiki/Apache_Harmony" class="extiw external" title="en:Apache Harmony"><span class="indicateur-langue" title="Article en anglais&nbsp;: «&nbsp;Apache Harmony&nbsp;»">(en)</span></a>, est un projet de <a href="Plateforme_Java" title="Plateforme Java">plateforme Java</a> de la <a href="Fondation_Apache" class="mw-redirect" title="Fondation Apache">fondation Apache</a> contenant une JVM.</li>
<li><a href="GIJ" title="GIJ">GIJ</a>, «&nbsp;sous-projet&nbsp;» de machine virtuelle Java du projet <a href="GNU" title="GNU">GNU</a>.</li>
<li><a href="Dalvik_(machine_virtuelle)" title="Dalvik (machine virtuelle)">Dalvik</a>, machine virtuelle développée par <a href="Google" title="Google">Google</a> pour <a href="Android" title="Android">Android</a>.</li>
<li><a href="SableVM" title="SableVM">SableVM</a></li>
<li>JamVM</li>
<li>Kaffe</li>
<li>CACAO</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Annexes">Annexes</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Liens_internes">Liens internes</h3></div>
<ul><li><a href="Machine_SECD" title="Machine SECD">Machine SECD</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/jvms/se7/html/">Spécifications de la JVM</a></li>
<li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://java-virtual-machine.net/other.html">Liste des machines virtuelles Java</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Références"><span id="R.C3.A9f.C3.A9rences"></span>Références</h3></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html">The Java Virtual Machine Specification, Second edition</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecIX.fm7.html">Garbage collection, index lettre G</a></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a> </span><span class="reference-text"> <abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external free" href="http://openjdk.java.net/groups/hotspot/">http://openjdk.java.net/groups/hotspot/</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a> </span><span class="reference-text"> <abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/java/library/j-jtp12214/">Java theory and practice&nbsp;: Dynamic compilation and performance measurement</a></span>
</li>
</ol></div>
</div>
<div class="navbox-container" style="clear:both;">


</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-06-25" href="https://fr.wikipedia.org/wiki/?title=Machine_virtuelle_Java&amp;oldid=226773380">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>